package com.adviceType.util;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 记录日志的工具栏，也是被增强类
 */
public class printlog {
    /**
     * 前置通知
     */
    public void beforeprintlogs(){
        System.out.println("开始打印日志log，执行了--->前置通知");
    }
    /**
     * 前置通知
     */
    public void afterprintlogs(){
        System.out.println("开始打印日志log，执行了--->后置通知");
    }
    /**
     * 异常
     */
    public void Throwingprintlogs(){
        System.out.println("开始打印日志log，执行了--->异常通知");
    }
    /**
     * 最终通知
     */
    public void finnallprintlogs(){
        System.out.println("开始打印日志log，执行了--->最终通知");
    }
    /**
     * 环绕通知 使用了代码进行控制，其实还有另一种解释：sprig框架为我们提供一种可以在代码中手动控制增强方法何时执行的方式。
     */
    public Object aroundprintlogs(ProceedingJoinPoint pjp){
        Object rtvalue=null;
        try{
            Object[] args=pjp.getArgs();//得到方法执行的参数。
            System.out.println("开始打印日志log，执行了--->前置通知");//前置通知，
            rtvalue=pjp.proceed();
            System.out.println("开始打印日志log，执行了--->后置通知");//后置通知，
            return rtvalue;
        }catch (Throwable t){//exection无法拦截需要使用更高级的Throwable
            System.out.println("开始打印日志log，执行了--->异常通知");//异常通知，
          throw new RuntimeException(t);
        }finally {
            System.out.println("开始打印日志log，执行了--->最终通知");//最终通知，
        }
    }
}
